package com.soup.lab.third.lock;

/**
 * @ClassName Lock
 * @Description:
 * @Author gaoxiang
 * @Date 2020/8/14 9:39
 * @Version V1.0
 **/
public interface Lock {
    /**
     * 尝试获取锁，在失败后重试直到超时
     * @param key       redis key
     * @param value     锁的值，用于删除时的验证
     * @param timeout   超时时间（毫秒）
     * @param retry     重试间隔（毫秒）
     * @return
     */
    boolean tryLock(String key, String value, long timeout, long retry);

    /**
     * 尝试获取锁，失败后直接返回false
     * @param key
     * @param value
     * @return
     */
    boolean tryLock(String key, String value);

    /**
     * 获取锁，会间歇地进行尝试
     * @param key       redis key
     * @param value     锁的值，用于删除时的验证
     * @return
     */
    boolean lock(String key, String value);

    /**
     * 解锁，当value和锁的值匹配时解锁成功
     * @param key
     * @param value
     * @return
     */
    boolean unlock(String key, String value);

}
